﻿using System.Linq;
using GigaSite.Domain.Entities;
using GigaSite.Domain.Interfaces.Repositories;

namespace GigaSite.Web.Areas.Catalog.Models
{
    /// <summary>
    /// Модель объявления в списке объявлений
    /// </summary>
    public class AdsListItemModel
    {
        public const string NoImageURL = "/Content/images/adsNoImage.png";
        
        /// <summary>
        /// Идентификатор объявления
        /// </summary>
        public long Id { get; set; }

        /// <summary>
        /// Заголовок
        /// </summary>
        public string Title { get; set; }

        /// <summary>
        /// URL картинки
        /// </summary>
        public string ImageURI { get; set; }

        /// <summary>
        /// URL уменьшенной копии картинки
        /// </summary>
        public string ThumbImageURI { get; set; }

        /// <summary>
        /// Количество просмотров
        /// </summary>
        public int Views { get; set; }

        /// <summary>
        /// Цена
        /// </summary>
        public double? Price { get; set; }

        /// <summary>
        /// Пользователь разместивший объявление
        /// </summary>
        public User Author { get; set; }

        /// <summary>
        /// Инициализирует модель на базе доменного объекта
        /// </summary>
        /// <param name="adv">Модель</param>
        /// <param name="imagesRepository">Доменный объект</param>
        public AdsListItemModel(Adv adv, IImagesRepository imagesRepository)
        {
            Id = adv.Id;
            Title = adv.Title;
            Views = adv.Views;
            this.ImageURI = adv.AdvImages.Count > 0
                                ? imagesRepository.GetFullImageURL(
                                    adv.AdvImages.OrderBy(m => m.Position).First().ImageURI)
                                : NoImageURL;
            Price = adv.Price;
            Author = adv.User;
        }

        /// <summary>
        /// Стандартный конструктор
        /// </summary>
        public AdsListItemModel()
        {
            
        }
    }
}